<?php
/*
 * [JINYUN!] (C)2001-2099 Jinyunweb.com
 * This is NOT a freeware, use is subject to license terms
 * $Id: 2017-12-13 03:39:35 apple $
*/
defined('BY_JYA') or exit('error');
$_RQ['op']=$_RQ['op']?$_RQ['op']:'list';
$tabs=array(
	array('op'=>'list','title'=>'应用列表'),
	array('op'=>'renzheng','title'=>'域名认证文件上传'),
);
if($_RQ['op']=='list'){
	$params=array('uniacid'=>$_SESSION['uniacid']);
	if(!empty($_RQ['title'])){
		$params['title like']='%'.trim($_RQ['title']).'%';
		$return['params']['title']=$_RQ['title'];
	}
	if(!empty($_RQ['type'])){
		$params['type']=intval($_RQ['type']);
		$return['params']['type']=intval($_RQ['type']);
	}
	if(!empty($_RQ['groupid'])){
		$params['groupid']=intval($_RQ['groupid']);
		$return['params']['groupid']=intval($_RQ['groupid']);
	}
	if(!empty($_RQ['pid'])){
		$params['pid']=intval($_RQ['pid']);
		$return['params']['pid']=intval($_RQ['pid']);
		
	}
	if($_SESSION['current_plugin'] && $_SESSION['current_plugin']!='core'){
		$pid=pdo_getcolumn('core_plugins',array('name'=>$_SESSION['current_plugin']),'id');
		$params['pid']=$pid;
		$return['params']['pid']=$pid;
	}
	$pindex = max(1, intval($_RQ['page']));
	$psize = 10;
	$total='';
	$fields=array('id','wxwork_id','pid','title','logo','tags','type','groupid','status','createtime','star','appid','isbindopen','tabletype','default');
	$list=pdo_getslice('core_account_wxwork_app',$params,array($pindex,$psize),$total,$fields,'','star desc, id desc');
	if($list){
		foreach($list as &$item){
			$item['plugin_title']=pdo_getcolumn('core_plugins',array('id'=>$item['pid']),'title');
			$item['wxwork_title']=pdo_getcolumn('core_account_wxwork',array('id'=>$item['wxwork_id']),'title');
		}
	}	
	$return['list']=$list;
	$totalpage=ceil($total/$psize);
	$totalpage=intval($totalpage);
	$return['totalpage'] =$totalpage;
	$return['params']['page'] =$pindex;
	$tip='[温馨提示]：这里是自建应用，非第三方应用！！
	</br>创建应用步骤：1、在这先创建一个应用；2、查看配置开发参数；3、移步企业微信后台https://work.weixin.qq.com/wework_admin/frame#apps，自建--创建应用，把第2步获得的参数填上；4、把企业微信创建的应用参数，填到下面的《绑定应用参数》（<red>勿必绑定正确的应用参数，否则会提示服务器没相应！</red>）
	</br>1、<red>这里的是自建应用，只对企业微信里面的自建应用有效，请勿对照企业微信服务商里面的第三方应用参数来设置！</red>
	</br>2、默认应用，一些生成企业微信二维码的地方需要用到默认员工！否则不会生成二维码！
	</br>3、<red>获取企业微信OPENID失败</red>！请检查应用配置（1、网页授权域名是否正确；2、应用ID、应用secret是否正确）<red>修改参数后，刷新页面缓存才能生效或换手机测试获取openid</red>！
	';
	$htmls=array(
		'type'=>'list',
		'tabs'=>$tabs,
		'list'=>array('data'=>'list','tip'=>$tip,'list'=>array(
			array('name'=>'star','title'=>'星数','type'=>'star','set'=>'star'),
			array('name'=>'id','title'=>'ID','type'=>'string'),
			array('name'=>'title','title'=>'应用名称','type'=>'string'),
			array('name'=>'logo','title'=>'应用LOGO','type'=>'image'),
			array('name'=>'tabletype','title'=>'应用端','type'=>'radio','options'=>'tabletype'),
			array('name'=>'plugin_title','title'=>'所属插件','type'=>'string'),
			array('name'=>'wxwork_title','title'=>'所属企业微信','type'=>'string'),
			array('name'=>'type','title'=>'应用类型','type'=>'radio','options'=>'types'),
			array('name'=>'groupid','title'=>'应用分类','type'=>'radio','options'=>'groups'),
			array('name'=>'default','title'=>'默认应用?','type'=>'switch','set'=>'set'),
			array('name'=>'isbindopen','title'=>'是否已绑定','type'=>'radio','options'=>'isbindopen'),
		),'action'=>array(
			array('type'=>'modal','op'=>'bindkey','action'=>'wxwork.app','title'=>'绑定应用参数'),
			array('type'=>'modal','op'=>'openkey','action'=>'wxwork.app','title'=>'查看配置参数'),
		)),
		'search_one'=>array('name'=>'title','title'=>'应用名称'),
	);
	$return['htmls']=$htmls;
	$return['tabletype']=get_app_types();
	$return['types']=array('0'=>'普通应用','1'=>'通讯录应用');
	$return['isbindopen']=array('0'=>'未绑定','1'=>'已绑定');
	$return['groups']=array(
		'0'=>'客户关系',
		'1'=>'供应链管理',
		'2'=>'移动办公',
		'3'=>'团队协同',
		'4'=>'文化建设',
		'5'=>'企业培训',
		'6'=>'人力资源',
		'7'=>'财务报销',
		'8'=>'企业服务',
		'9'=>'表单流程',
		'10'=>'电子合同',
		'11'=>'家校沟通',
	);
	exi($return);
}
if($_RQ['op']=='edit'){
	$return=array();
	$id=intval($_RQ['id']);
	if($id){
		$item=pdo_get('core_account_wxwork_app',array('id'=>$id));
	}else{
		$item=array('tabletype'=>'1');
	}
	if($_SESSION['current_plugin'] && $_SESSION['current_plugin']!='core'){
		$pid=pdo_getcolumn('core_plugins',array('name'=>$_SESSION['current_plugin']),'id');
	}
	$item['showpid']=$pid?0:1;
	$return['item']=$item;
	$htmls=array(
		'type'=>'edit',
		'post'=>'post',
		'tabs'=>$tabs,
		'edit_tab'=>true,
		'edit'=>array(
					array('name'=>'title','title'=>'应用名称','type'=>'string','must'=>true),
					array('name'=>'logo','title'=>'应用LOGO','type'=>'image'),
					array('name'=>'tabletype','title'=>'应用端','type'=>'radio','options'=>'tabletype'),
					array('name'=>'images','title'=>'应用展示','type'=>'images'),
					array('name'=>'desc','title'=>'应用描述','type'=>'string'),
					array('name'=>'wxwork_id','title'=>'所属企业微信','type'=>'select','option_title'=>'title','options'=>'wxworks'),
					array('name'=>'pid','title'=>'所属插件','show'=>array('tabletype'=>1,'showpid'=>1),'type'=>'select','option_title'=>'title','options'=>'plugins'),
					array('name'=>'pid','title'=>'所属插件','show'=>array('tabletype'=>4,'showpid'=>1),'type'=>'select','option_title'=>'title','options'=>'wxapp'),
					array('name'=>'type','title'=>'应用类型','type'=>'radio','options'=>'types'),
					array('name'=>'groupid','title'=>'应用分类','type'=>'radio','options'=>'groups'),					
		)
	);
	$return['tabletype']=get_app_types();
	$return['plugins']=pdo_getall('core_plugins',array('type'=>3,'hide'=>0,'style'=>1),array('id','title','style'),'id');
	$return['wxapp']=pdo_getall('core_wxapp',array('hide'=>0),array('id','title'),'id');
	$return['wxworks']=pdo_getall('core_account_wxwork',array('uniacid'=>$_SESSION['uniacid']),array('id','title'),'id');
	$return['types']=array('0'=>'普通应用','1'=>'通讯录应用');
	$return['groups']=array(
		'0'=>'客户关系',
		'1'=>'供应链管理',
		'2'=>'移动办公',
		'3'=>'团队协同',
		'4'=>'文化建设',
		'5'=>'企业培训',
		'6'=>'人力资源',
		'7'=>'财务报销',
		'8'=>'企业服务',
		'9'=>'表单流程',
		'10'=>'电子合同',
		'11'=>'家校沟通',
	);
	$return['htmls']=$htmls;
	exi($return);
}
if($_RQ['op']=='post'){
	$postdata=get_postdata();
	if(!$postdata['title']){
		exi('标题不能为空','error');
	}
	if($_SESSION['current_plugin'] && $_SESSION['current_plugin']!='core'){
		$pid=pdo_getcolumn('core_plugins',array('name'=>$_SESSION['current_plugin']),'id');
		$postdata['pid']=$pid;
	}
	if(!$postdata['pid']){
		exi('必须绑定一个插件','error');
	}
	if(!$postdata['wxwork_id']){
		exi('必须绑定一个企业微信','error');
	}
	$data=array(
		'title'=>trim($postdata['title']),
		'desc'=>trim($postdata['desc']),
		'images'=>ijson_encode($postdata['images']),
		'logo'=>trim($postdata['logo']),
		'tags'=>trim($postdata['tags']),
		'pid'=>intval($postdata['pid']),
		'type'=>intval($postdata['type']),
		'star'=>intval($postdata['star']),
		'status'=>intval($postdata['status']),
		'tabletype'=>intval($postdata['tabletype']),
		'wxwork_id'=>intval($postdata['wxwork_id']),
	);
	$id=intval($postdata['id']);
	if($id){
		$data['expire']=0;
		pdo_update('core_account_wxwork_app',$data,array('id'=>$id));
	}else{
		$data['uniacid']=$_SESSION['uniacid'];
		$data['createtime']=TIMESTAMP;
		pdo_insert('core_account_wxwork_app',$data);
	}
	exi('操作成功！','','goback');
}
if($_RQ['op']=='bindkey'){
	//设置小程序支付参数
	if($_RQ['postdata']){
		$post=get_postdata();
		$id=intval($post['id']);
		if(!$id){
			exi('请先选择要设置的应用！','error');
		}
		if(!$post['appid']){
			exi('应用ID不能为空','error');
		}
		if(!$post['appsecret']){
			exi('应用secret不能为空','error');
		}
		$appid=pdo_getcolumn('core_account_wxwork_app',array('uniacid'=>$_SESSION['uniacid'],'appid'=>$post['appid']),'id');
		if($appid && $appid!=$id){
			exi('其他应用已经添加了本appid，应用ID不能重复！','error');
		}
		$data=array(
			'appid'=>$post['appid'],
			'appsecret'=>$post['appsecret'],
			'txsecret'=>$post['txsecret'],
			'isbindopen'=>1,
		);
		pdo_update('core_account_wxwork_app',$data,array('id'=>$id));
		exi('设置成功！');
	}else{
		$id=intval($_RQ['id']);
		if(!$id){
			exi('请先选择要设置的应用！','error','list');
		}
		$item=pdo_get('core_account_wxwork_app',array('id'=>$id),array('id','title','appid','appsecret','txsecret'));
		$return['item']=$item;
		$return['htmls']=array(
			'type'=>'edit',
			'desc'=>'绑定企业微信应用参数',
			'edit'=>array(
				array('type'=>'string','name'=>'title','title'=>'应用名称','read'=>true),
				array('type'=>'string','name'=>'appid','title'=>'应用ID','help'=>'https://work.weixin.qq.com/wework_admin/frame#apps 创建应用后可获取；AgentId（对应于旧的以tj开头的套件id）'),
				array('type'=>'string','name'=>'appsecret','title'=>'应用secret','help'=>'https://work.weixin.qq.com/wework_admin/frame#apps 创建应用后可获取；'),
				array('type'=>'string','name'=>'txsecret','title'=>'通讯录管理secret','help'=>'进入企业微信管理后台，在“管理工具” -- “通讯录同步”开启“API接口同步”--获取Secret；'),
			),
		);
		exi($return);
	}
}
if($_RQ['op']=='openkey'){
	$id=intval($_RQ['id']);
	if(!$id){
		exi('请先选择应用！','error','list');
	}
	$item=pdo_get('core_account_wxwork_app',array('id'=>$id),array('id','pid','title','appid','appsecret','wxwork_id'));
	if(!$item['appid']){
		exi('请先绑定应用参数！','error','list');
	}
	$wxwork=pdo_get('core_account_wxwork',array('id'=>$item['wxwork_id']),array('id','token','aeskey'));
	$item['token']=$wxwork['token'];
	$item['aeskey']=$wxwork['aeskey'];
	$plugin_name=pdo_getcolumn('core_plugins',array('id'=>$item['pid']),'name');
	$wxwork_api=SITEROOT.'api/wxwork_api.php?i='.$_SESSION['uniacid'].'&wxwork_id='.$item['wxwork_id'].'&app_id='.$id;
	$item['index_url']=custom_url($plugin_name.'/index//wxwork_id='.$item['wxwork_id'].'&app_id='.$id,true);
	$item['domain']=$_SERVER['HTTP_HOST'];
	$item['data_url']=$wxwork_api;
	$return['item']=$item;
	$return['htmls']=array(
			'type'=>'look',
			'desc'=>'配置开发信息',
			'look'=>array(
				array('type'=>'copy','name'=>'title','title'=>'应用名称','read'=>true,'help'=>'用户名称'),
				array('type'=>'copy','name'=>'index_url','title'=>'工作台应用主页','help'=>'用户从企业微信工作台进入应用时将直接跳转到对应的主页URL'),
				array('type'=>'copy','name'=>'domain','title'=>'授权回调域','help'=>'填写不带http:// 或https:// 头，可信域名必须通过ICP备案验证,设置可信域名后支持应用的OAuth2授权、JSSDK调用等（企业微信--应用管理--登录授权--授权完成回调域名--完成域名归属验证）'),
				array('type'=>'copy','name'=>'data_url','title'=>'API接收消息URL','help'=>'接收消息服务器配置!'),
				array('type'=>'copy','title'=>'令牌（Token）','name'=>'token','help'=>'复制到企业微信对应应用，保持一直！' ),
				array('type'=>'copy','title'=>'消息加解密密钥(EncodingAESKey)','name'=>'aeskey','help'=>'复制到企业微信对应应用，保持一直！' ),
			),
	);
	exi($return);
}
if($_RQ['op']=='star'){
	$id=intval($_RQ['id']);
	if(!$id){
		exi('参数错误！','error');
	}
	$update=array();
	$post=get_postdata();
	if(isset($post['star'])){
		$update['star']=$post['star'];
	}
	if($update){
		pdo_update('core_account_wxwork_app',$update,array('id'=>$id));
	}
	exi('操作成功！');
}
if($_RQ['op']=='set'){
	$id=intval($_RQ['id']);
	if(!$id){
		exi('参数错误！','error');
	}
	$update=array();
	$post=get_postdata();
	if(isset($post['isshow'])){
		$update['isshow']=intval($post['isshow']);
	}
	if(isset($post['default'])){
		$update['default']=intval($post['default']);
	}
	if($update){
		pdo_update('core_account_wxwork_app',$update,array('id'=>$id));
	}
	exi('操作成功！');
}
if($_RQ['op']=='del'){
	$del=trim($_RQ['del'],';');
	if($del){
		$del=explode(';',$del);
	}else{
		$del=array();
	}
	if($_RQ['id']){
		$del[]=$_RQ['id'];
	}
	foreach($del as $id){
		$id=intval($id);
		if($id){
			pdo_delete('core_account_wxwork_app',array('id'=>$id));
		}
	}
	exi('删除成功！');
}
if($_RQ['op']=='renzheng'){
	//上传认证文件
	if($_RQ['postdata']){
		$post=get_postdata();
		if(!$post['renzheng']){
			exi('请先上传认证文件！','error');
		}
		$filename=pdo_getcolumn('core_attachment',array('attachment'=>$post['renzheng']),'title');
		if(preg_match('/[^\w\.-]/',$filename)){
			exi('认证文件名不合法！','error');
		}
		$file_data=cfc('files')->source_read($post['renzheng']);
		if(strlen($file_data)>100){
			exi('上传失败！认证文件内容超过限制！','error');
		}
		file_put_contents(ROOT_D.'/'.$filename.'.txt',$file_data);
		exi('上传成功！');
	}
	$return['item']=array();
	$return['htmls']=array(
		'type'=>'edit',
		'desc'=>'上传认证文件',
		'tabs'=>$tabs,
		'edit'=>array(
			array('type'=>'upfile','title'=>'认证文件','name'=>'renzheng','ftype'=>'other','help'=>'本功能用于上传认证文件到站点根目录！例如，小程序或企业微信设置授权域名时，提示需要上传认证文件。请下载下来，并在此处上传。'),
		),
	);
	exi($return);
}
if($_RQ['op']=='get_app'){
	$pindex = max(1, intval($_RQ['page']));
	$psize = 10;
	$return['params']=$params=array();
	$params=array('uniacid'=>$_SESSION['uniacid']);
	$fields=array('title');
	if($_RQ['find']){
		$field=in_array($_RQ['field'],$fields)?$_RQ['field']:'title';
		$params[$field.' like']='%'.$_RQ['find'].'%';
		$return['params']['find']=$_RQ['find'];
		$return['params']['field']=$field;
	}
	if($_SESSION['current_plugin'] && $_SESSION['current_plugin']!='core'){
		$pid=pdo_getcolumn('core_plugins',array('name'=>$_SESSION['current_plugin']),'id');
		$params['pid']=$pid;
		$return['params']['pid']=$pid;
	}
	$search_fields=array('id','wxwork_id','pid','title','logo');
	$list=pdo_getslice('core_account_wxwork_app',$params,array($pindex,$psize),$total,$search_fields,'','id desc');
	if($list){
		foreach($list as &$item){
			$item['plugin_title']=pdo_getcolumn('core_plugins',array('id'=>$item['pid']),'title');
			$item['wxwork_title']=pdo_getcolumn('core_account_wxwork',array('id'=>$item['wxwork_id']),'title');
			//整理返回数据
			if($_RQ['op']=='many'){
				$item['res']=array('id'=>$item['id'],'title'=>$item['title'],'image'=>$item['logo']);
			}else{
				$item['res']=$item['id'];
			}
		}
	}
	$return['list']=$list;
	$totalpage=ceil($total/$psize);
	$totalpage=intval($totalpage);
	$return['totalpage'] =$totalpage;
	$return['params']['page'] =$pindex;
	$return['htmls']=array(
		'type'=>'list',
		'list'=>array('data'=>'list','del_one'=>false,'delall'=>false,'edit'=>false,'list'=>array(
		    array('name'=>'id','title'=>'应用id','type'=>'string'),
			array('title'=>'应用信息','type'=>'img_string','img'=>'logo',
			'data'=>array(
				array('title'=>'名称：','name'=>'title'),
				)
			),
			array('name'=>'plugin_title','title'=>'所属插件','type'=>'string'),
			array('name'=>'wxwork_title','title'=>'绑定企业微信','type'=>'string'),
		),'action'=>array(
			array('type'=>'modal_result','name'=>'res','title_field'=>'title','title'=>'选取'),
		)),
		'search_one'=>array('name'=>'find','select_name'=>'field','select_title'=>'筛选','is_radio'=>true,'options'=>'fields'),
	);
	$return['fields']=array(
		'title'=>'应用名称',
	);
	exi($return);
}
if($_RQ['op']=='set'){
	$id=intval($_RQ['id']);
	if(!$id){
		exi('请先选择应用！','error');
	}
	$update=array();
	$post=get_postdata();
	if(isset($post['default'])){
		$update['default']=$post['default'];
	}
	if($update){
		if($post['default']==1){
			pdo_update('core_account_wxwork_app',array('default'=>0),array('default'=>1,'uniacid'=>$_SESSION['uniacid']));
		}
		pdo_update('core_account_wxwork_app',$update,array('id'=>$id));
	}
	exi('操作成功！');
}